from django.db import models
from django.contrib.auth.models import AbstractUser, UserManager as _UserManager

# Create your models here.
# 自定义管理器（功能：创建用户时可以不用填写email）
class UserManager(_UserManager):
    def create_superuser(self, username, password, email=None, **extra_fields):
        super().create_superuser(username=username, password=password, email=email, **extra_fields)

class User(AbstractUser):
    """
        自定义的User模型，添加moblie,email_active字段
    """
    # 添加手机字段, 第一个'手机号'是数据库中备注信息，max_length是该字段的最大长度
    # unique是该字段唯一，不能重复，help_text是在我们的admin后台来提示的字段信息
    # error_messages是当插入字段出错时提示的报错信息
    mobile = models.CharField('手机号',max_length=11, unique=True,
                    help_text='手机号', error_messages={'unique':'此手机号已注册'})
    # 添加一个邮箱是否激活的字段，默认值为False，及该邮箱未激活
    email_active = models.BooleanField('邮箱激活状态',default=False)
    # 源信息，内嵌类，可以给我们的model定义元数据
    class Meta:
        db_table = 'tb_user'  # 指定数据库表名
        verbose_name = '用户' # 在admin站点显示的名称
        verbose_name_plural = verbose_name # 复数
    # 为了方便在我们调用该类时可以看到我们创建的用户名称
    def __str__(self):
        return  self.username
    # 通过 createsuperuser 这个命令创建用户时，需要的字段
    # 该参数里面的内容需要和我们上方唇膏就的字段名相同
    REQUIRED_FIELDS = ['mobile']
    # user模型相当强大，还有修改必须输出email这个行为
    # 这时候就需要用到我们的管理器了object，可以查看AbstractUser这个模型类中的管理器 objects = UserManager()
    # UserManager这个就是管理器的内容，我们可以进行重写部分模块，来达到我们的自定义管理器的目的
    # 因为我们需要创建用户时不需要必须填写email，我们创建用户时又需要用到createsuperuser这个命令
    # 所以我们需要复写UserManager这个类中的create_superuser的方法，因为我们创建用户时，调用的就是这个方法
    # 因为我们创建的自定义管理器不能和继承自带管理器的类同名，所以我们给继承的django的管理器起一个别名，再进行继承
    # 在上方复写好了我们自定义的管理器后，需要在User模型类中指定该自定义管理器
    objects = UserManager()







